<?php

namespace login\view;

require_once("./common/Filter.php");
require_once("./login/model/LoginObserver.php");

class LoginView implements \login\model\LoginObserver {

	private static $LOGOUT = "logout";
	private static $LOGIN = "login";
	private static $USERNAME = "LoginView::UserName";
	private static $PASSWORD = "LoginView::Password";

	private static $CHECKED = "LoginView::Checked";

	private $message = "";

    private static $REGISTER = "register";                                    //<--skapar ny variabel---url länken--------------------------------------------------
    private static $BACK = "logout";                                          //<---skapar ny variabel---url länken-------------------------------------------------

    private static $NEW_USERNAME = "LoginView::Username";                      //<---skapar ny variabel----nytt användarnamn-------------------------------------------
    private static $NEW_PASSWORD = "LoginView::Password";                      //<---skapar ny variabel----nytt lösenord-------------------------------------------
    private static $NEW_RETYPED_PASSWORD = "LoginView::RetypedPassword";       //<---skapar ny variabel----repition av nytt lösenord-------------------------------------------

    public $m_newUsername = "";                                                //<---skapar ny variabel---tom men fylls senare med det ny reggade användarnamnet--------------------------------------------



	public function getLoginBox() {

		$user = $this->getUserName();
		$checked = $this->userWantsToBeRemembered() ? "checked=checked" : "";

		$html = "
			<form action='?" . self::$LOGIN . "' method='post' enctype='multipart/form-data'>
				<fieldset>
					$this->message
					<legend>Login - Skriv in användarnamn och lösenord</legend>
					<label for='UserNameID' >Användarnamn :</label>
					<input type='text' size='20' name='" . self::$USERNAME . "' id='UserNameID' value='$user' />
					<label for='PasswordID' >Lösenord  :</label>
					<input type='password' size='20' name='" . self::$PASSWORD . "' id='PasswordID' value='' />
					<label for='AutologinID' >Håll mig inloggad  :</label>
					<input type='checkbox' name='" . self::$CHECKED . "' id='AutologinID' $checked/>
					<input type='submit' name=''  value='Logga in' />
				</fieldset>
			</form>";

		return $html;

	}


    public function getRegisterNewUserBox() {                  //<----skapar en ny funktion-tog en kopia på Tolls formulär och
                                                               // gör om den till en till ny för registrering av ny användare
       $user = $this->getNewUserName();                             //<-------skapa ny html som jag tar kopia av Toll's kod

       $html = "
            <form action='?" . self::$REGISTER . "' method='post' enctype='multipart/form-data'>
                <fieldset>
                    $this->message
                    <legend>Registrera ny användare - Skriv in användarnamn och lösenord</legend>
                    <label for='UserNameID' >Namn :</label>
                    <input type='text' size='20' name='" . self::$NEW_USERNAME . "' id='UserNameID' value='$user' />
                    <br>
                    <label for='PasswordID' >Lösenord  :</label>
                    <input type='password' size='20' name='" . self::$NEW_PASSWORD . "' id='PasswordID' value='' />
                    <br>
                    <label for='PasswordID2' >Reptera lösenordet  :</label>
                    <input type='password' size='20' name='" . self::$NEW_RETYPED_PASSWORD . "' id='PasswordID2' value='' />
                    <br>
                     <label for='RegistreraID' >Skicka  :</label>
                    <input type='submit' name=''  value='Registrera' id='RegistreraID' />
                </fieldset>
            </form>";

        return $html;                                                   //<-------------------------------

    }





    public function isRegisteringNewUser() {                  //<--skapar en ny funktion----------------------------------------
        return isset($_GET[self::$REGISTER]);                //<-----om den är satt retunerar den true annars false-kollar om man klickat på register länken

        }

	public function isLoggingOut() {
		return isset($_GET[self::$LOGOUT]);
	}

	public function isLoggingIn() {
		if (isset($_GET[self::$LOGIN])) {
			return true;
		} else if ($this->hasCookies()) {
			return true;
		} else {
			return false;
		}
	}


	public function getRegisterButton() {                                                           //<--Skapa hela ny funktion-----------------------------------------------------
        return "<a href='?" . self::$REGISTER . "'>Registrera ny användare</a>";                    //<----de retunerar länkar ---------------------------------------------------
    }

    public function getBackButton() {                                                               //<---Skapa hela ny funktion----------------------------------------------------
        return "<a href='?" . self::$BACK . "'>Tillbaka</a>";                                          //<---de retunerar länkar----------------------------------------------------
    }


	public function getLogoutButton() {                                                             //<--Skapa hela ny funktion-----------------------------------------------------
		return "$this->message <a href='?" . self::$LOGOUT . "'>Logga ut</a>";                      //<----de retunerar länkar---------------------------------------------------
	}

	public function getUserCredentials() {
		if ($this->hasCookies()) {
			return \login\model\UserCredentials::createWithTempPassword(new \login\model\UserName($this->getUserName()),
																	  $this->getTemporaryPassword());
		} else {
			return \login\model\UserCredentials::createFromClientData(	new \login\model\UserName($this->getUserName()),
																	\login\model\Password::fromCleartext($this->getPassword()));
		}
	}

	public function loginFailed() {
		if ($this->hasCookies()) {
			$this->message = "<p>Felaktig information i cookie</p>";
			$this->removeCookies();
		} else {

			if ($this->getUserName() == "") {
				$this->message .= "<p>Användarnamn saknas</p>";
			} else if ($this->getPassword() == "") {
				$this->message .= "<p>Lösenord saknas</p>";
			} else {
				$this->message = "<p>Felaktigt användarnamn och/eller lösenord</p>";
			}
		}
	}

	public function loginOK($tempCookie) {

		if ($this->userWantsToBeRemembered() ||
			$this->hasCookies()) {
			if ($this->hasCookies()) {
				$this->message  = "<p>Inloggning lyckades via cookies</p>";
			} else {
				$this->message  = "<p>Inloggning lyckades och vi kommer ihåg dig nästa gång</p>";
			}

			$expire = $tempCookie->getExpireDate();
			setcookie(self::$USERNAME, $this->getUserName(), $expire);
			setcookie(self::$PASSWORD, $tempCookie->getTemporaryPassword(), $expire);
		} else {
			$this->message  = "<p>Inloggning lyckades</p>";
		}

	}

	public function doLogout() {
		$this->removeCookies();

		$this->message  = "<p>Du har nu loggat ut</p>";
	}



	private function getUserName() {
		if (isset($_POST[self::$USERNAME])) {
			return \Common\Filter::sanitizeString($_POST[self::$USERNAME]);

        } else if (isset($_COOKIE[self::$USERNAME])) {
			return \Common\Filter::sanitizeString($_COOKIE[self::$USERNAME]);

    	} else if (isset($_POST[self::$NEW_USERNAME]))   {                                             //<---endast else if- ditlagd--resten Toll's kod--------------------------------
            return $_POST[self::$NEW_USERNAME];
		} else
			return "";
    	}

	private function getPassword() {
		if (isset($_POST[self::$PASSWORD]))
			return \Common\Filter::sanitizeString($_POST[self::$PASSWORD]);
		else
			return "";
	}

	private function userWantsToBeRemembered() {
		return isset($_POST[self::$CHECKED]);
	}

	private function getTemporaryPassword() {
		if (isset($_COOKIE[self::$PASSWORD])) {
			$fromCookieString = \Common\Filter::sanitizeString($_COOKIE[self::$PASSWORD]);
			return \login\model\TemporaryPasswordClient::fromString($fromCookieString);
		} else {
			return \login\model\TemporaryPasswordClient::emptyPassword();
		}
	}

	private function hasCookies() {
		return isset($_COOKIE[self::$PASSWORD]) && isset($_COOKIE[self::$USERNAME]);
	}

	private function removeCookies() {

		unset($_COOKIE[self::$USERNAME]);
		unset($_COOKIE[self::$PASSWORD]);

		$expireNow = time()-1;
		setcookie(self::$USERNAME, "", $expireNow);
		setcookie(self::$PASSWORD, "", $expireNow);
	}


    public function setNewUsername($username) {                             //<--Skapa hela ny funktion---tar in $usernamn från view.php --------------------
        if (isset($_POST[self::$NEW_USERNAME])){                            // tar in $usernamn det nya användarnamnet och setter den,fyller medlemsvariabl med innehållet
            $this->m_newUsername = $username;
        }
    }

    public function setNewSuccessfulUserMessage($message) {                   //<--Skapa hela ny funktion-----------------------
        $this->message = $message;
    }

    public function setNewSuccessfulUserName($username) {               //<--------Skapa hela ny funktion-- hämtar in $usernamn fyller vårt privata static $usernamn sen skriver ut i html
        self::$USERNAME = $username;
    }

    private function getNewUsername() {                                    //<---Skapa hela ny funktion----------------------
        if (isset($_POST[self::$NEW_USERNAME])){                        // här hämtas det nya användarnamnet som anropas längre upp i denna class
            return $this->m_newUsername;
        } else {
                return "";
        }
    }

    private function getNewPassword() {                                             //<---Skapa hela ny funktion----------------------
        if (isset($_POST[self::$NEW_PASSWORD])) {
            return \Common\Filter::sanitizeString($_POST[self::$NEW_PASSWORD]);
        } else {
            return "";
        }
    }

   private function getNewRetypedPassword() {                                           //<---Skapa hela ny funktion----------------------
        if (isset($_POST[self::$NEW_RETYPED_PASSWORD])) {
            return \Common\Filter::sanitizeString($_POST[self::$NEW_RETYPED_PASSWORD]);
        } else {
            return "";
        }
    }


    public function errorMessageNewUser($status) {                    //<--Skapa hela ny funktion--här fyller vi den privata medelmsvariablen med innehåll från status. och sen skriver ut det i vårt html längre upp
        $this->message  = $status ;
    }


}
